import Vue from 'vue'
import {shopcart_add,shopcart_sub,shopcart_list} from '../../utils/api'

import { Toast } from 'vant'
export default {
    namespaced:true,//开启模块
    state: { //负责存储数据
        shopcartlist:[],
    },
    getters: { //定义计算方法(类似组件中的计算属性)
        totalCount(state){
          return state.shopcartlist.reduce((t,item)=>{
            return t + item.count;
          },0)
        },
        totalPrice(state){
          return state.shopcartlist.reduce((t,item)=>{
            return t + item.count * item.min_price;
          },0).toFixed(2)
        },
    },
    mutations:{
        add_shopcart(state,params){ //加入购物车
            //需要判断 商品是否已经加入购物车
            var res = state.shopcartlist.find((item)=>{
              return item.id == params.id;
            })
      
            if( res ){ //如果条件成立, 说明 商品已经加入购物车
              res.count++;
            }else{ //条件不成立, 说明 商品未加入购物车
              params = JSON.parse( JSON.stringify(params) );
              Vue.set(params,'count',1);
              state.shopcartlist.push( params );
            }
        },
        minus_shopcart(state,params){ //数量减1
        //需要判断 商品是否已经加入购物车
        var index = state.shopcartlist.findIndex((item)=>{
            return item.id == params.id;
        })
    
        if( index != -1 ){ //如果条件成立, 说明 商品已经加入购物车
            if( state.shopcartlist[index].count > 1 ){ //如果商品数量大于1, 数量减1
            state.shopcartlist[index].count--;
            }else{ //商品数量小于等于1, 从购物车删除该商品
            state.shopcartlist.splice(index,1);
            }
        }
        },
        save_shopcarlist(state,params){ //保存收藏列表
        state.shopcartlist = params;
        },
    },
    actions:{
        //发请求 加入购物车,并同步到vuex
        request_add_shopcart({ commit },params){
            //获取userinfo
            var userinfo = localStorage.getItem('userinfo') ? JSON.parse( localStorage.getItem('userinfo') ) : {};
            shopcart_add({userid:userinfo.id,goodid:params.id}).then((res)=>{
            if( res.data.code == 200 ){
                //同步到vuex
                commit('add_shopcart',params);
            }
            })
        },
        //发请求 数量减1,并同步到vuex
        request_minus_shopcart({ commit },params){
            //获取userinfo
            var userinfo = localStorage.getItem('userinfo') ? JSON.parse( localStorage.getItem('userinfo') ) : {};
            shopcart_sub({userid:userinfo.id, goodid:params.id}).then((res)=>{
            if( res.data.code == 200 ){
                Toast.success(res.data.msg);
                //同步到vuex
                commit('minus_shopcart',params);
            }else{
                Toast.success(res.data.msg);
            }
            })
        },
        //请求数据库中的购物车列表, 并同步到vuex
        request_shopcartlist({ commit },params){
            //获取userinfo
            var userinfo = localStorage.getItem('userinfo') ? JSON.parse( localStorage.getItem('userinfo') ) : {};
            shopcart_list({userid:userinfo.id}).then((res)=>{
            commit('save_shopcarlist',res.data.list);
            })
        }
    }
}